package com.freewater.springboot.demo.aop.pointcuts;

import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

/**
 * within
 * 格式说明
 * within(类型表达式)：目标对象target的类型是否和within中指定的类型匹配
 * <p>
 * 匹配规则： target.getClass().equals(within表达式中指定的类型)
 * <p>
 * 链接：<a href="https://juejin.cn/post/7077425331954515999">Spring系列25：Spring AOP 切点详解</a>
 */
@Aspect
public class PointcutWithin {

    // 匹配 com.crab.spring.aop.demo02包及其子包下任何类的任何方法
    @Pointcut("within(com.crab.spring.aop.demo02..*)")
    public void m() {
    }

    // 匹配m.crab.spring.aop.demo02包及其子包下IService类型及其子类型的任何方法
    @Pointcut("within(com.crab.spring.aop.demo02..IService+)")
    public void m2() {
    }

    // 匹配com.crab.spring.aop.demo02.UserService类中所有方法，不含其子类
    @Pointcut("within(com.crab.spring.aop.demo02.UserService)")
    public void m3() {
    }
}
